#创建一个数据框
manager <- c(1, 2, 3, 4, 5)
date <- c('10/24/08', '10/28/08', '10/01/08', '12/28/08', '05/01/09')
country <- c('US', 'US', 'UK', 'UK', 'UK')
gender <- c('M', 'F', 'M', 'M', 'F')
age <- c(32, 45, 25, 39, 99)
q1 <- c(5, 3, 3, 3, 2)
q2 <- c(4, 5, 5, 3, 2)
q3 <- c(5, 2, 5, 4, 1)
q4 <- c(5, 5, 2, NA, 2)
q5 <- c(5, 5, 2, NA, 1)
managerData <- data.frame(manager, date, country, gender, age, q1, q2, q3, q4, q5)
managerData

#利用factor()函数将M和F改为0和1
managerData$gender <- factor(managerData$gender, 
                             levels = c('M', 'F'),
                             labels = c('0', '1'))
managerData

#创建新变量
mydata <- data.frame(col1 = c(2, 2, 4, 5),
                     col2 = c(3, 4, 2, 1))
mydata

#第一种将列变量加起来的方式
sumcol <- mydata$col1 + mydata$col2
sumcol

#第二种将列变量加起来的方式
attach(mydata)
mydata$sumcol <- col1 + col2
mydata
detach(mydata)

#第三种将列变量加起来的方式
mydata <- transform(mydata, sumcol = col1 + col2,
                    meancol = (col1 + col2) / 2)
mydata

#年龄重编码
#第一种方式:
managerData$agecat[managerData$age < 55] <- 'Young'
managerData$agecat[managerData$age >= 55 & 
                     managerData$age <= 75] <- 'Middle Aged'
managerData$agecat[managerData$age > 75] <- 'Elder'
managerData

#第二种方式: within函数
managerData <- within(managerData, {
  agecat <- NA
  agecat[age > 75] <- 'Elder'
  agecat[age < 55] <- 'Young'
  agecat[age >= 55 & age <= 75] <- 'Middle Aged'
})
managerData

#20220512***********************************************
#下载包
install.packages("Rcpp")
install.packages("plyr")
#导包
library(Rcpp)
library(plyr)
#改名
names(managerData)
names(managerData)[1] <- "managerID"
names(managerData)[6:10] <- c('item1','item2','item3','item4','item5')
managerData
#重编码某些值为缺失值
managerData$age[managerData$age == 99] <- NA
managerData
#在分析中排除缺失值
x <- c(1,2,3,NA)
y <- sum(x,na.rm = TRUE)
y
#na.omit会去除有NA的一行数据
managerData
newdata <- na.omit(managerData)
newdata
#改变数据框内的日期数据格式
str(managerData$date[1])
managerData$date <- as.Date(managerData$date, '%m/%d/%y')
managerData
#格式化日期
Sys.Date()
date()
format(Sys.Date(), format='%m/%d/%y')
#计算时间间隔(一)
startdate <- as.Date('2001-05-20')
enddate <- as.Date('2022-05-20')
days <- enddate - startdate
days
#计算时间间隔(二)
difftime(enddate, startdate, units = 'weeks')

#把日期改为字符串格式
str(startdate)
startdate <- as.character(startdate)
is.character(startdate)

#将年龄从低到高排序(这里的逗号不能省)
newdata <- managerData[order(managerData$age),]
newdata

attach(managerData)
newdata1 <- managerData[order(gender, age),]#先按gender排序,再按照年龄排序
newdata1
datach(managerData)

#0512下午**********************************************
#数据集的合并(添加列)
dataFrameA <- managerData
manager <- c(1,2,3,4,5)
q1 <- c(4,5,3,2,3)
q2 <- c(4,5,3,3,2)
q3 <- c(5,3,5,2,1)
q4 <- c(5,5,5,NA,1)
q5 <- c(5,5,2,NA,1)
dataFrameB <- data.frame(manager, q1, q2, q3, q4, q5)
dataFrameB
#第一种：merge函数
total <- merge(dataFrameA, dataFrameB, by='manager')
total
#第二种添加列的方法cbind函数
total1 <- cbind(dataFrameA, dataFrameB)
total1
#cbind合并矩阵(列)
vector1 <- matrix(c(1,2,3,4), nrow = 2, ncol = 2)
vector2 <- matrix(c(1, 2))
res <- cbind(vector1, vector2)
res
#rbind合并矩阵(行)
vector1 <- matrix(c(1,2,3,4), nrow = 2, ncol = 2)
vector2 <- matrix(c(1, 2), nrow = 1, ncol = 2)
res <- rbind(vector1, vector2)
res

#取子集(逗号左边代表行，右边代表列，逗号不能少)
score <- managerData[,c(6:10)]
score
score1 <- managerData[c(1:3), c(6:10)] #取1~3行和6~10列
score1
#方法二
table <- c('q1','q2','q3','q4','q5')
scores <- managerData[table]
scores

#剔除其中的变量
mycars <- names(managerData)%in%c('q3','q4')
newdatas <- managerData[!mycars]
newdatas

#选择出来年龄大于30的男性的信息
maleMiddle <- managerData[which(managerData$gender == 'M' & managerData$age > 30),]
maleMiddle
#再挑选出日期的信息
managerData$date <- as.Date(managerData$date, '%m/%d/%y')
maleMiddle1 <- managerData[which(managerData$country == 'US' & managerData$date > '2008-10-20'),]
maleMiddle1
#用subset筛选
newdata <- subset(managerData, age >= 35 | age < 24, 
                  select =c('q1','q2','q3','q4','q5'))
newdata

newdata1 <- subset(managerData, age >= 35 & gender == 'M', 
                  select = gender:q4)
newdata1

#随机抽样（1~5行随机取2列）
set.seed(123) #设置随机数种子
mysample <- managerData[sample(1:5, 3, replace = FALSE)]
mysample


